/**
 * 测试快速错误检测功能
 * 验证爬虫能否快速识别错误页面并避免重定向
 */

const axios = require('axios');

const BASE_URL = 'http://localhost:3000/api/products';

/**
 * 测试快速错误检测
 */
async function testQuickErrorDetection() {
  console.log('⚡ 测试快速错误检测功能');
  console.log('=' .repeat(50));
  
  // 测试用例：可能会显示错误的URL
  const testCases = [
    {
      name: '地区限制商品（快速检测）',
      url: 'https://shop.tiktok.com/view/product/1234567890123456789?region=US&local=en&source=product_detail',
      expectedError: 'REGION_RESTRICTED',
      maxTime: 10000 // 期望在10秒内完成
    },
    {
      name: '不存在的商品ID（快速检测）',
      url: 'https://shop.tiktok.com/view/product/9999999999999999999?region=MY&local=en&source=product_detail',
      expectedError: 'PRODUCT_NOT_FOUND',
      maxTime: 10000
    },
    {
      name: '正常商品（对比测试）',
      url: 'https://shop.tiktok.com/view/product/1731808168774042656?region=MY&local=en&source=product_detail',
      expectedError: null,
      maxTime: 15000
    }
  ];
  
  for (let i = 0; i < testCases.length; i++) {
    const testCase = testCases[i];
    console.log(`\n📋 测试 ${i + 1}: ${testCase.name}`);
    console.log('URL:', testCase.url);
    console.log('期望最大耗时:', testCase.maxTime + 'ms');
    
    try {
      const startTime = Date.now();
      
      // 测试智能爬虫的快速检测
      const response = await axios.post(`${BASE_URL}/test/smart`, {
        url: testCase.url
      });
      
      const endTime = Date.now();
      const duration = endTime - startTime;
      
      console.log(`⏱️  实际耗时: ${duration}ms`);
      
      // 检查是否在预期时间内完成
      if (duration <= testCase.maxTime) {
        console.log('✅ 在预期时间内完成');
      } else {
        console.log('⚠️  超出预期时间');
      }
      
      console.log('响应状态:', response.status);
      console.log('成功:', response.data.success);
      console.log('消息:', response.data.message);
      
      if (response.data.data) {
        const data = response.data.data;
        
        if (data.isPageError) {
          console.log('✅ 快速检测到页面错误');
          console.log('错误类型:', data.error);
          console.log('错误消息:', data.message);
          
          // 验证错误类型是否符合预期
          if (testCase.expectedError && data.error === testCase.expectedError) {
            console.log('🎯 错误类型符合预期');
          } else if (testCase.expectedError) {
            console.log('❌ 错误类型不符合预期，期望:', testCase.expectedError);
          }
        } else if (data.success) {
          console.log('✅ 成功获取商品信息');
          console.log('商品标题:', data.title);
        } else {
          console.log('ℹ️  其他类型的失败:', data.error);
        }
      }
      
    } catch (error) {
      const endTime = Date.now();
      const duration = endTime - startTime;
      
      console.log(`⏱️  实际耗时: ${duration}ms`);
      console.log('❌ 请求失败');
      console.log('HTTP状态:', error.response?.status);
      
      if (error.response && error.response.data) {
        console.log('错误消息:', error.response.data.message);
        console.log('错误类型:', error.response.data.error);
      }
    }
    
    // 等待一下避免请求过快
    if (i < testCases.length - 1) {
      console.log('等待2秒后继续下一个测试...');
      await new Promise(resolve => setTimeout(resolve, 2000));
    }
  }
}

/**
 * 测试完整流程的快速错误处理
 */
async function testCompleteFlowQuickError() {
  console.log('\n\n🔄 测试完整流程的快速错误处理');
  console.log('=' .repeat(50));
  
  const testUrl = 'https://shop.tiktok.com/view/product/9999999999999999999?region=MY&local=en&source=product_detail';
  
  try {
    console.log('测试URL:', testUrl);
    console.log('期望：快速检测错误并跳过后续步骤');
    
    const startTime = Date.now();
    
    const response = await axios.post(`${BASE_URL}/complete-flow`, {
      url: testUrl
    });
    
    const endTime = Date.now();
    const duration = endTime - startTime;
    
    console.log(`⏱️  总耗时: ${duration}ms`);
    console.log('响应状态:', response.status);
    console.log('成功:', response.data.success);
    console.log('消息:', response.data.message);
    
    if (response.data.skipSubsequentSteps) {
      console.log('✅ 正确跳过了后续步骤');
    }
    
    if (duration < 15000) {
      console.log('✅ 快速完成，避免了长时间等待和重定向');
    } else {
      console.log('⚠️  耗时较长，可能存在重定向风险');
    }
    
  } catch (error) {
    const endTime = Date.now();
    const duration = endTime - startTime;
    
    console.log(`⏱️  总耗时: ${duration}ms`);
    console.log('HTTP状态:', error.response?.status);
    
    if (error.response && error.response.data) {
      console.log('错误消息:', error.response.data.message);
      console.log('错误类型:', error.response.data.error);
      console.log('执行步骤:', error.response.data.step);
      
      if (error.response.data.skipSubsequentSteps) {
        console.log('✅ 正确跳过了后续步骤');
      }
      
      if (error.response.data.step === 'tiktok_page_error') {
        console.log('✅ 在TikTok步骤快速检测到页面错误');
      }
      
      if (duration < 15000) {
        console.log('✅ 快速完成，避免了长时间等待和重定向');
      }
    }
  }
}

/**
 * 对比测试：快速检测 vs 普通检测
 */
async function compareDetectionSpeed() {
  console.log('\n\n📊 对比测试：快速检测 vs 普通检测');
  console.log('=' .repeat(50));
  
  const testUrl = 'https://shop.tiktok.com/view/product/9999999999999999999?region=MY&local=en&source=product_detail';
  
  // 测试智能爬虫（快速检测）
  console.log('\n--- 智能爬虫（快速检测）---');
  try {
    const startTime1 = Date.now();
    
    const response1 = await axios.post(`${BASE_URL}/test/smart`, {
      url: testUrl
    });
    
    const duration1 = Date.now() - startTime1;
    console.log(`智能爬虫耗时: ${duration1}ms`);
    console.log('结果:', response1.data.success ? '成功' : '失败');
    
    if (response1.data.data && response1.data.data.isPageError) {
      console.log('错误检测: ✅');
    }
    
  } catch (error) {
    const duration1 = Date.now() - startTime1;
    console.log(`智能爬虫耗时: ${duration1}ms`);
    console.log('结果: 失败');
  }
  
  // 等待一下
  await new Promise(resolve => setTimeout(resolve, 2000));
  
  // 测试高级爬虫（对比）
  console.log('\n--- 高级爬虫（对比测试）---');
  try {
    const startTime2 = Date.now();
    
    const response2 = await axios.post(`${BASE_URL}/test/advanced`, {
      url: testUrl
    });
    
    const duration2 = Date.now() - startTime2;
    console.log(`高级爬虫耗时: ${duration2}ms`);
    console.log('结果:', response2.data.success ? '成功' : '失败');
    
    if (response2.data.data && response2.data.data.isPageError) {
      console.log('错误检测: ✅');
    }
    
  } catch (error) {
    const duration2 = Date.now() - startTime2;
    console.log(`高级爬虫耗时: ${duration2}ms`);
    console.log('结果: 失败');
  }
}

/**
 * 主函数
 */
async function main() {
  console.log('🚀 开始测试快速错误检测功能');
  console.log('目标：快速识别错误页面，避免重定向');
  console.log('服务器地址:', BASE_URL);
  
  // 测试快速错误检测
  await testQuickErrorDetection();
  
  // 测试完整流程的快速错误处理
  await testCompleteFlowQuickError();
  
  // 对比测试检测速度
  await compareDetectionSpeed();
  
  console.log('\n' + '='.repeat(50));
  console.log('🎉 所有测试完成！');
  console.log('\n💡 优化说明:');
  console.log('  - 页面加载后立即检测错误，避免长时间等待');
  console.log('  - 检测到错误页面后立即返回，跳过后续处理');
  console.log('  - 减少了重定向风险和不必要的资源消耗');
  console.log('  - 提高了错误处理的响应速度');
}

// 运行测试
if (require.main === module) {
  main().catch(console.error);
}

module.exports = {
  testQuickErrorDetection,
  testCompleteFlowQuickError,
  compareDetectionSpeed
};